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

Re: Probleme mit Modul strx Kategorie: Programmierung (von heiko - 12.01.2007 15:17)
Als Antwort auf Re: Probleme mit Modul strx von André H. - 12.01.2007 13:22
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo Andre,

nein ich habe das Programm auf der Station zu laufen gehabt.

GruÃ? Heiko

> Hallo Heiko,
>
> Bei mir funktioniert die Funktion mit strx.left() ohne Probleme.
> Hast Du evtl. den Fehler gemacht, und hast das ganze im Simulator und
> nicht in der CC2 getestet ?
> Denn das geht nicht.
> strx.c2 basiert auf dem System-Modul sys0002.hex.
> Der Simulator kennt dieses aber nicht, somit funktionieren im Simulator
> natürlich keine ASM-Aufrufe.
> So etwas muÃ? immer im Controller selbst getestet werden.
> �brigens, ist Deine erste Funktion unnötig umfangreich.
>
> Die gleiche Funktion könnte auch so aussehen:
> function Temp2string (int DSint, string DSstring)
> {string string1;
>  str.clear(string1);
>
>  str.putint(string1,DSint);
>  strx.left(string1,DSstring,str.length(string1)-1);
>  strx.right(string1,string1,1);
>  str.putchar(DSstring,'.');
>  str.putstring(DSstring,string1);
>  sleep 200;
>  lcdext.goto(1,11);
>  lcdext.print(DSstring);
>  sleep 200;
> }

>
> Es gibt aber noch mehrere Lösungen für Deine Funktion:
> function Temp2string (int DSint, string DSstring)
> {
>  str.clear(DSstring);
>  str.putint(DSstring,DSint/10);
>  str.putchar(DSstring,'.');
>  str.putint(DSstring,DSint%10);
>  sleep 200;
>  lcdext.goto(1,11);
>  lcdext.print(DSstring);
>  sleep 200;
> }

>
> Hier mu� man aber beachten, da� für negative Werte ein anderes Handling benötigt wird:
> function Temp2string (int DSint, string DSstring)
> {
>  str.clear(DSstring);
>  if DSint<0 str.putchar(DSstring,'-');
>  str.putint(DSstring,math.abs(DSint)/10);
>  str.putchar(DSstring,'.');
>  str.putint(DSstring,math.abs(DSint)%10);
>  sleep 200;
>  lcdext.goto(1,11);
>  lcdext.print(DSstring);
>  sleep 200;
> }

>
> Dann gibt es noch weitere Versionen mit gleichem Ergebnis:
> function Temp2string (int DSint, string DSstring)
> {byte len;
>  str.clear(DSstring);
>  str.putint(DSstring,DSint);
>  len=str.length(DSstring)-1;
>  str.putchar(DSstring,strx.getchar(DSstring,len));
>  strx.paste(".",DSstring,len,1);
>  sleep 200;
>  lcdext.goto(1,11);
>  lcdext.print(DSstring);
>  sleep 200;
> }

>
> Aber so, wie ich es sehe, muÃ? ich noch eine Funktion strx.insert() schaffen.
> Ich hab's auf meine ToDo-Liste geschrieben.
> Wenn Du aber schon einen Vorgeschmack haben möchtest bis ich
> die ASM Routine geschrieben habe:
> function insert(byte source[], byte dest[], byte start, byte len)
> {byte i;
>  if dest[31]+len>30 len=30-dest[31];
>  for i=dest[31]...>=start step -1
>  {
>   dest[i+len]=dest[i];
>  }
>  for i=0...<len
>  {
>   dest[start+i]=source[i];
>  }
>  dest[31]=math.min(dest[31]+len,30);
> }
>
> function Temp2string (int DSint, string DSstring)
> {string s;
>  str.clear(DSstring);
>  str.putint(DSstring,DSint);
>  s='.';
>  insert(s,DSstring,str.length(DSstring)-1,1);
>  sleep 200;
>  lcdext.goto(1,11);
>  lcdext.print(DSstring);
>  sleep 200;
> }

>
>
> MfG André H.
>
>
>
> > Hallo,
> >
> > ich habe das Problem nun durch folg. Funktion geklärt, mich würde aber trotzdem interessieren,
> > warum strx.left und strx.right keine richtigen Werte liefert.
> >
> >
> > function Temp2string (int DSint, string DSstring)
> >  {int Rest, ganzzahl;
> >   string string1,lastchar;
> >   str.clear(string1);
> >   str.clear(lastchar);
> >   Rest=0;
> >   Rest = DSint % 10;
> >   if Rest>0 DSint=DSint-Rest;
> >   ganzzahl=DSint/10;
> >   str.putint(string1,ganzzahl);
> >   str.putint(lastchar,Rest);
> >   DSstring=string1 + "." + lastchar;
> >   }
> >

> >
> > GruÃ? Heiko
> >
> > > Hallo,
> > > ich habe aktuell in meinem Projekt ein Problem mit den strx-Funktionen.
> > >
> > > Da ich DS1631 auslese und deren MeÃ?wert (int bei dem die letzte Ziffer eine Nachkommastelle ist)
> > > als string in eine Variable schreiben möchte, habe ich mir folg. Funktion deklariert.
> > > Funktion daher, weil ich mehrere Werte umwandeln muÃ?.
> > >
> > >
> > > function Temp2string (int DSint, string DSstring)
> > >  {int SLen;
> > >   string string1,lastchar;
> > >   str.clear(DSstring);
> > >   str.clear(string1);
> > >   str.clear(lastchar);
> > >  
> > >   str.putint(DSstring,DSint);            
> > >      /*   DSstring wird noch richtig gefüllt */
> > >   SLen = str.length(DSstring);        
> > >      /*   Länge wird noch erkannt            */
> > >   SLen = SLen-1;
> > >   strx.left(DSstring,string1,SLen);    
> > >     /*   string1 ist nach der Opp leer      */
> > >   strx.right(DSstring,lastchar,1);      
> > >     /*   lastchar ist nach der Opp leer    */
> > >   str.putstring(DSstring,string1);
> > >   str.clear(DSstring);
> > >   str.putstring(DSstring,string1);
> > >   str.putstring(DSstring,".");
> > >   str.putstring(DSstring,lastchar);
> > >   sleep 200;
> > >   lcdext.goto(1,11);
> > >   lcdext.print(DSstring);
> > >   sleep 200;
> > >  }
> > >
> > >

> > >
> > > Die Funktion soll den DSint-Wert einlesen, die letzte Ziffer trennen und dann wieder
> > > mit einem "Punkt" dazwischen zusammenfügen. Dann als DSstring übergeben. Letztendlich nichts
> > > anderes, als es die Funktion lcdext.zahl4n1 macht, aber eben nicht aufs Display schreiben, sondern
> > > in einen String.
> > >
> > > Mein Problem ist, da� die Funktion bis zur Bestimmung der Stringlänge durchläuft, das Ergebniss
> > > der strx.left und strx.right Aufrufe jeweils leere Strings ergeben und dann das Kontrollergebniss auf dem
> > > Display so aussieht '_._' (die Unterstriche sind Leerzeichen).
> > >
> > > Kann jemand einen Fehler erkennen?
> > > Oder gibt es ev. eine komfortablere Möglichkeit der Umwandlung eines Int-Wertes z.B. 210 in einen String-Wert
> > > 21,0 (eine Nachkommastelle).
> > >
> > > GruÃ? Heiko


    Antwort schreiben


Antworten:

Re: Probleme mit Modul strx (von André H. - 13.01.2007 10:55)
    Re: Probleme mit Modul strx (von heiko - 13.01.2007 16:23)
        Re: Probleme mit Modul strx (von André H. - 14.01.2007 19:53)