Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Danke André für die prompte Lösung. > > Wie immer lag der Teufel im Detail.:-) > > Michael > > > Hallo Michael, > > > > > <code> > > > else //Wenn Link aktiv, sende Statusanfrage > > > { > > > s_message="STS"; //Sende Status-Request > > > hwcom.flush(); > > > hwcom.send(s_message,3) > > > > > > lcdext.zahl2(hwcom.receive(s_response,27,5000)); //Ergibt 27 -> OK! > > > lcdext.zahl3(strx.comp(s_response,"535-00060955233056232211111")); //Ergibt -1 -> OK > > > lcdext.zahl2(str.length(s_response)); //Ergibt 0???? > > </code> > > Es ist immer wieder dasselbe "Problem". > > hwcom.receive() hat noch nie und wird auch nie "Strings" empfangen, da das noch nie > > so gedacht war. Diese Funktion dient zum Empfang von Daten in ein Byte-Array. > > Ein String ist zwar auch ein Byte-Array, jedoch mit der Besonderheit, daß in Byte 31 die Anzahl > > der Zeichen zu stehen hat. Diese Schreibst Du aber nicht rein. > > Wenn Du mit hwcom.receive() direkt in einen String empfängst, so bleibt in Byte 31 > > natürlich der alte Wert stehen, da der String hier als normales Byte-Array behandelt wird. > > Wie man es macht, kannst Du z.B. anhand von hwcom.input() erkennen. > > Bei Dir wird das aber etwas einfacher: > > <code> > > function recString(s[], byte len, long timeout) returns byte > > { > > s[31]=hwcom.receive(s, len, timeout); > > return s[31]; > > }</code> > > > > <code> > > > str.clear(s_substring); > > > strx.cut(s_response,s_substring,0,3); //erste 3 Zeichen > > > V_BatVtg=strx.getNum(s_substring); //ergibt 0 über hwcom, 535 über b.) > > > lcdext.zahl4n1(V_BatVtg); > > > str.clear(s_substring); > > > strx.cut(s_response,s_substring,0,5); > > > V_TotBatCur=strx.getNum(s_substring); //negatives Vorzeichen wird interpretiert > > > > > > etc.etc. > > > </code> > > Der Rest scheint zu stimmen. > > Besser wäre es bei solchen Dingen natürlich, wenn die Daten nicht als Text übertragen > > würde, sondern direkt als Byte, In oder Long-Werte. > > Das würde das Auswerten einfacher machen. > > > > Aber noch ein paar Anmerkungen zum Zerlegen von Strings: > > > > Mit strx.cut() ist es in Deinem Fall etwas zu aufwendig. In Deinem Fall wären die > > Funktion strx.left() und strx.mid() besser geeignet: > > <code> strx.left(s_response, s_substring, 3);</code> > > Und für alle folgenden Teile mit mid(): > > <code> strx.mid(s_response, s_substring, 3, 5);</code> > > Übrigens brauchst Du bei keiner der Funktionen den String vorher löschen. > > Die Ziel-Strings werden automatisch überschrieben und der rest mit ASCII 0 aufgefüllt. > > > > Da Dein empfangener String immer ein festes Format hat, würde ich an Deiner Stelle > > eine eigene Funktion mit strx.getNum als Vorlage schreiben. > > Dann brauchst Du die Zwischenschritte mit dem Kopieren der Strings nicht. > > > > MfG André H.