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 André H. - 12.01.2007 13:22)
Als Antwort auf Re: Probleme mit Modul strx von heiko - 12.01.2007 11:32
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0, OSOPT V3.1
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


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Probleme mit Modul strx (von heiko - 12.01.2007 15:17)
    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)